from qiniu import Auth
import qiniu.config
from qiniu import Auth, put_file_v2, etag
import uuid
import time

# 七牛云配置
access_key = "wJlVV8Fveh28Cyi6HnPsGc4AIcn5gT4_QPRtgFT-"
secret_key = "szp0RV7XWqWZ-KQl0khzhbgQWznmBC6L3t29HHUF"
bucket_name = 'crazysheep'

# 七牛云上传域名（根据存储空间所在区域选择）
# 华东: upload.qiniup.com
# 华北: upload-z1.qiniup.com  
# 华南: upload-z2.qiniup.com
# 北美: upload-na0.qiniup.com
# 东南亚: upload-as0.qiniup.com
upload_domain = 'upload-z1.qiniup.com'

# CDN域名（需要替换为实际的CDN域名）
cdn_domain = 'http://t1dldmtpy.hb-bkt.clouddn.com'

# 构建鉴权对象
q = Auth(access_key, secret_key)

def generate_upload_token(key=None, expires=3600*24*7):
    """
    生成上传token
    :param key: 文件名，如果为None则自动生成
    :param expires: token有效期（秒），默认7天
    :return: token字符串
    """
    if key is None:
        # 生成唯一的文件名
        key = f"avatar/{uuid.uuid4().hex}_{int(time.time())}"
    
    return q.upload_token(bucket_name, key, expires)

def get_file_url(key, domain="http://t1dldmtpy.hb-bkt.clouddn.com"):
    """
    获取文件的完整URL（私有空间需要下载token）
    :param key: 文件名
    :param domain: CDN域名
    :return: 完整的文件URL
    """
    # 生成下载token（私有空间需要）
    download_token = q.private_download_url(f"{domain}/{key}", expires=3600)  # 1小时有效期
    return download_token

def upload_file(file_path, key=None):
    """
    上传文件到七牛云
    :param file_path: 本地文件路径
    :param key: 远程文件名，如果为None则自动生成
    :return: 上传结果
    """
    if key is None:
        key = f"files/{uuid.uuid4().hex}_{int(time.time())}"
    
    token = generate_upload_token(key)
    
    # 上传文件
    put_policy = {
        'scope': bucket_name,
        'key': key,
        'expires': 3600*24*7
    }
    
    return {
        'token': token,
        'key': key,
        'bucket': bucket_name
    }

# 示例用法
if __name__ == "__main__":
    # 生成上传token
    token = generate_upload_token()
    print(f"Upload token: {token}")
    
    # 生成文件URL
    file_url = get_file_url("example.jpg")
    print(f"File URL: {file_url}")
